function tryCreateInterpreter() {
	this.stack = new Array();
	this.classes = new Array();
	
	this.tryInitialize = function(class_name) {
		//return the initialized class		
		try {
			the_class = the_loader.tryLoadAndLinkClass(class_name);
		}
		catch (e) {
			throw e;
		}
		this.classes.push(the_class);
		//alert("loaded");
		try {
			the_class.tryInitializeClass();
		} catch (e) {
			throw e;
		}
		return the_class;
	}
	this.tryExecute = function() {
		alert("execute");
		alert(the_executor.itpt);
		while (this.stack.length > 0) {
			the_executor.tryExecuteOpCode();
		}
		alert("executed");
	}
	this.interpret = function(main_class_name, args) {
		//alert("start interpret");
			var main_class = this.tryInitialize(main_class_name);
			
			var main_method = null;
			for (var i = main_class.parse_result.methods.length - 1; i >= 0; --i) 
				if (main_class.parse_result.methods[i].actual_name == "main") 
					if (main_method == null)
						main_method = main_class.parse_result.methods[i];
					else 
						throw "Mutiple main methods are found";
			if (main_method == null) throw "Main method not found"; //TODO check standard
			
			this.stack.push(new tryCreateFrame(main_class, main_method, args));
			this.tryExecute();
		try {
			
		}
		catch (e) {
			alert(e.toString());
			return;
		}
	}
}